package com.jsejtman.gastos.service.impl;

import com.jsejtman.gastos.persistence.entity.Usuario;
import com.jsejtman.gastos.service.exception.ServiceException;

/**
 * Interfaz con todas las operaciones aplicables a una entidad de datos Entity.
 * 
 * @author jsejtman
 */
public interface IUsuarioService {

	/**
	 * Obtiene una entidad de datos Usuario a través de su identificador.
	 * 
	 * @param id Identificador de la entidad.
	 * @return Entidad de datos Usuario hallada.
	 * @throws ServiceException En caso de problemas.
	 */
	Usuario getUsuarioById(final Long id) throws ServiceException;

	/**
	 * Obtiene una entidad de datos Usuario a través de su nombre de usuario.
	 * 
	 * @param nombreDeUsuario Nombre de usuario.
	 * @return Entidad de datos Usuario hallada.
	 * @throws ServiceException En caso de problemas.
	 */
	Usuario getUsuarioByNombreDeUsuario(final String nombreDeUsuario) throws ServiceException;

	/**
	 * Graba o actualiza el usuario pasado.
	 * 
	 * @param usuario el usuario a grabar.
	 * @throws ServiceException en caso de problemas
	 */
	void saveUsuario(final Usuario usuario) throws ServiceException;

	/**
	 * Borra un usuario.
	 * 
	 * @param usuario el usuario a borrar
	 * @throws ServiceException si ocurre un error.
	 */
	void deleteUsuario(final Usuario usuario) throws ServiceException;

}
